const app = getApp();
const { request } = require('../../utils/request.js');
const api = require('../../utils/api.js');

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    visible: {
      type: Boolean,
      value: false
    },
    userInfo: {
      type: Object,
      value: null
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    // 当前激活的标签页
    activeTab: 'list',
    
    // 激活码列表相关
    codes: [],
    page: 1,
    pageSize: 10,
    totalPages: 1,
    searchKeyword: '',
    
    // 生成激活码相关
    generateCount: 1,
    addCount: 10,
    isGenerating: false,
    generatedCodes: []
  },

  /**
   * 组件的生命周期
   */
  lifetimes: {
    attached() {
      // 组件挂载时调用
      if (this.data.visible) {
        this.fetchCodes();
      }
    }
  },

  observers: {
    'visible': function(visible) {
      // 当visible属性变化时，如果变为true，则加载数据
      if (visible) {
        this.fetchCodes();
      }
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    // 关闭弹窗
    closePopup() {
      this.setData({
        visible: false
      });
      this.triggerEvent('close');
    },
    
    // 防止滚动穿透，但不阻止内部滚动
    preventScroll(e) {
      // 只阻止背景蒙层的滚动，不阻止内容区域的滚动
      if (e.target.dataset.role === 'mask') {
        return false;
      }
      // 允许内容区域滚动
      return true;
    },
    
    // 切换标签页
    switchTab(e) {
      const tab = e.currentTarget.dataset.tab;
      this.setData({
        activeTab: tab
      });
      
      // 切换到列表页时刷新数据
      if (tab === 'list') {
        this.fetchCodes();
      }
    },
    
    // 获取激活码列表(只获取未使用的激活码)
    fetchCodes() {
      wx.showLoading({
        title: '加载中...'
      });
      
      // 按照后端API要求调整参数
      const params = {
        page: 1,
        per_page: 5,  // 每页5条
        status: 0  // 未使用状态
      };
      
      // 如果有搜索关键字，按使用次数搜索
      if (this.data.searchKeyword) {
        params.usage_count = parseInt(this.data.searchKeyword);
      }
      
      request(api.admin_codes, 'GET', params)
        .then(res => {
          wx.hideLoading();
          if (res.code === 0) { // 后端返回code=0表示成功
            this.setData({
              codes: res.data.items || [],
              totalPages: res.data.pages || 1
            });
          } else {
            wx.showToast({
              title: res.message || '获取激活码失败',
              icon: 'none'
            });
          }
        })
        .catch(err => {
          wx.hideLoading();
          wx.showToast({
            title: '网络错误，请重试',
            icon: 'none'
          });
          console.error('获取激活码列表失败', err);
        });
    },
    
    // 搜索激活码
    searchCodes() {
      this.setData({
        page: 1
      }, () => {
        this.fetchCodes();
      });
    },
    
    // 翻页
    prevPage() {
      if (this.data.page > 1) {
        this.setData({
          page: this.data.page - 1
        }, () => {
          this.fetchCodes();
        });
      }
    },
    
    nextPage() {
      if (this.data.page < this.data.totalPages) {
        this.setData({
          page: this.data.page + 1
        }, () => {
          this.fetchCodes();
        });
      }
    },
    
    // 输入框事件处理
    onSearchInput(e) {
      this.setData({
        searchKeyword: e.detail.value
      });
    },
    
    onGenerateCountChange(e) {
      this.setData({
        generateCount: e.detail.value
      });
    },
    
    onAddCountChange(e) {
      this.setData({
        addCount: e.detail.value
      });
    },
    
    // 生成激活码
    generateCodes() {
      const count = parseInt(this.data.generateCount);
      const addCount = parseInt(this.data.addCount);
      
      if (isNaN(count) || count <= 0 || count > 100) {
        wx.showToast({
          title: '生成数量需在1-100之间',
          icon: 'none'
        });
        return;
      }
      
      if (isNaN(addCount) || addCount <= 0) {
        wx.showToast({
          title: '增加次数必须大于0',
          icon: 'none'
        });
        return;
      }
      
      this.setData({
        isGenerating: true
      });
      
      request(api.admin_generate_codes, 'POST', {
        count: count,
        usage_count: addCount,
        remark: '小程序管理界面生成'
      })
        .then(res => {
          this.setData({
            isGenerating: false
          });
          
          if (res.code === 0) { // 后端返回code=0表示成功
            // 处理生成的激活码列表
            let generatedCodes = [];
            if (res.data && res.data.codes) {
              // 获取激活码列表
              generatedCodes = res.data.codes.map(item => item.code);
            }
            
            this.setData({
              generatedCodes: generatedCodes
            });
            wx.showToast({
              title: '生成成功',
              icon: 'success'
            });
          } else {
            wx.showToast({
              title: res.message || '生成失败',
              icon: 'none'
            });
          }
        })
        .catch(err => {
          this.setData({
            isGenerating: false
          });
          wx.showToast({
            title: '网络错误，请重试',
            icon: 'none'
          });
          console.error('生成激活码失败', err);
        });
    },
    
    // 复制激活码
    copyAllCodes() {
      const codesText = this.data.generatedCodes.join('\n');
      wx.setClipboardData({
        data: codesText,
        success() {
          wx.showToast({
            title: '已复制全部激活码',
            icon: 'success'
          });
        }
      });
    },
    
    copySingleCode(e) {
      const code = e.currentTarget.dataset.code;
      wx.setClipboardData({
        data: code,
        success() {
          wx.showToast({
            title: '已复制激活码',
            icon: 'success'
          });
        }
      });
    },
    
    // 删除激活码
    deleteCode(e) {
      const code = e.currentTarget.dataset.code;
      const codeId = e.currentTarget.dataset.id;
      
      if (!codeId) {
        wx.showToast({
          title: '无法删除，缺少ID',
          icon: 'none'
        });
        return;
      }
      
      // 先检查是否有token
      const token = wx.getStorageSync('token');
      if (!token) {
        wx.showToast({
          title: '未登录，无法操作',
          icon: 'none'
        });
        return;
      }
      
      wx.showModal({
        title: '确认删除',
        content: '确定要删除此激活码吗？删除后将无法恢复。',
        confirmColor: '#ff4d4f',
        success: (res) => {
          if (res.confirm) {
            wx.showLoading({
              title: '删除中...'
            });
            
            // 尝试使用不同的请求方式
            wx.request({
              url: getApp().globalData.serverUrl + '/api/admin/activation-codes/delete/' + codeId,
              method: 'POST',
              data: {},
              header: {
                'content-type': 'application/json',
                'Authorization': 'Bearer ' + token
              },
              success: (res) => {
                wx.hideLoading();
                console.log('删除激活码响应', res);
                
                if (res.statusCode === 200 && res.data && res.data.code === 0) {
                  this.fetchCodes(); // 刷新列表
                  wx.showToast({
                    title: '删除成功',
                    icon: 'success'
                  });
                } else {
                  // 显示详细的错误信息
                  const errorMsg = (res.data && res.data.message) || 
                                   (res.data && res.data.msg) || 
                                   '删除失败(Code: ' + res.statusCode + ')';
                  
                  wx.showToast({
                    title: errorMsg,
                    icon: 'none'
                  });
                  
                  // Token可能过期，提示用户重新登录
                  if (res.statusCode === 401) {
                    setTimeout(() => {
                      wx.showModal({
                        title: '登录已过期',
                        content: '请重新登录后再操作',
                        showCancel: false
                      });
                    }, 1500);
                  }
                }
              },
              fail: (err) => {
                wx.hideLoading();
                console.error('删除激活码请求失败', err);
                
                wx.showToast({
                  title: '网络错误，请检查网络连接',
                  icon: 'none'
                });
              },
              complete: () => {
                // 延迟刷新以便用户看到提示
                setTimeout(() => {
                  this.fetchCodes();
                }, 1500);
              }
            });
          }
        }
      });
    }
  }
}) 